// vuex
const cookieparser = process.server ? require('cookieparser') : undefined
const axios = process.server ? require('axios') : null

// 导出的方式必须使用 export，不可以是 export default
// 导出的 state 必须是一个函数，并最终返回一个对象，这是防止服务端渲染数据时导致数据污染
export const state = () => {
  return {
    user: null
  }
}

export const mutations = {
  cacheUser(state, user) {
    state.user = user
  }
}

export const actions = {
  // nuxtServerInit 会在服务端渲染的时候执行，我们可以在这里初始化一些状态
  async nuxtServerInit({ commit }, { req }) {
    if (req.headers.cookie) {
      let user = null
      // TODO: 优化获取用户信息的方法，通过 api 实时获取（以优化）
      const cookie = cookieparser.parse(req.headers.cookie)
      try {
        // 通过 token 实时获取用户信息
        if (cookie.token) {
          let { data } = await axios({
            method: 'GET',
            url: 'https://conduit.productionready.io/api/user',
            headers: {
              Authorization: `Token ${cookie.token}`
            }
          })
          user = data.user
        }
      } catch (e) {
        // no user
      }
      commit('cacheUser', user)
    }
  }
}